/* @flow */

import config from 'core/config'
import {hyphenate} from 'shared/util'

function isKeyNotMatch<T>(expect: T | Array<T>, actual: T): boolean {
  if (Array.isArray(expect)) {
    return expect.indexOf(actual) === -1
  } else {
    return expect !== actual
  }
}

/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
export function checkKeyCodes(
  eventKeyCode: number,
  key: string,
  builtInKeyCode

? : number | Array < number >,
  eventKeyName ? : string,
  builtInKeyName ? : string | Array < string >
):
  ? boolean {
  const mappedKeyCode = config.keyCodes[key] || builtInKeyCode
  if(builtInKeyName && eventKeyName && !config.keyCodes[key]
)
{
  return isKeyNotMatch(builtInKeyName, eventKeyName)
}
else
if (mappedKeyCode) {
  return isKeyNotMatch(mappedKeyCode, eventKeyCode)
} else if (eventKeyName) {
  return hyphenate(eventKeyName) !== key
}
}
